// Copyright Epic Games, Inc. All Rights Reserved. // 版权声明，表示此文件版权归Epic Games公司所有

#pragma once // 预处理指令，确保这个头文件只被包含一次，防止重复定义

#include "UObject/Interface.h" // 包含UE中接口类的基类定义

#include "LyraAbilitySourceInterface.generated.h" // 包含由UE头文件工具生成的代码，用于支持UINTERFACE和GENERATED_BODY等宏

class UObject; // 前向声明UObject类
class UPhysicalMaterial; // 前向声明UPhysicalMaterial类
struct FGameplayTagContainer; // 前向声明FGameplayTagContainer结构体

/** Base interface for anything acting as a ability calculation source */ // 多行注释：作为技能计算源的所有事物的基础接口
UINTERFACE() // UE宏，用于声明一个UInterface，它会被编译成UClass
class ULyraAbilitySourceInterface : public UInterface // 声明ULyraAbilitySourceInterface类，它继承自UInterface，是接口的UObject包装器
{
	GENERATED_UINTERFACE_BODY() // UE宏，生成UInterface类所需的标准代码体（如构造函数等）
};

class ILyraAbilitySourceInterface // 声明实际的接口类ILyraAbilitySourceInterface（I前缀通常表示接口）
{
	GENERATED_IINTERFACE_BODY() // UE宏，生成接口类所需的标准代码体

	/**
	 * Compute the multiplier for effect falloff with distance
	 * 
	 * @param Distance			Distance from source to target for ability calculations (distance bullet traveled for a gun, etc...)
	 * @param SourceTags		Aggregated Tags from the source
	 * @param TargetTags		Aggregated Tags currently on the target
	 * 
	 * @return Multiplier to apply to the base attribute value due to distance
	 */ // 多行注释：函数说明，计算因距离导致的技能效果衰减乘数
	virtual float GetDistanceAttenuation(float Distance, const FGameplayTagContainer* SourceTags = nullptr, const FGameplayTagContainer* TargetTags = nullptr) const = 0; // 纯虚函数声明：获取距离衰减，参数为距离、可选的源标签容器指针、可选的目标签容器指针，返回浮点数，const表示不修改对象状态，=0表示纯虚函数

	virtual float GetPhysicalMaterialAttenuation(const UPhysicalMaterial* PhysicalMaterial, const FGameplayTagContainer* SourceTags = nullptr, const FGameplayTagContainer* TargetTags = nullptr) const = 0; // 纯虚函数声明：获取物理材质衰减，参数为物理材质对象指针、可选的源标签容器指针、可选的目标签容器指针，返回浮点数，const表示不修改对象状态，=0表示纯虚函数
};